package br.eng.eliseu.gwt.gestaoWeb.client.ui.sistema.configuracoes;

import br.eng.eliseu.gwt.gestaoWeb.client.mvp.PortalResource;
import br.eng.eliseu.gwt.gestaoWeb.client.mvp.presenter.BasePresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.mvp.view.BaseDisplay;
import br.eng.eliseu.gwt.gestaoWeb.client.service.CadastroService;
import br.eng.eliseu.gwt.gestaoWeb.client.service.CadastroServiceAsync;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.component.messageBox.MessageBoxPanel;
import br.eng.eliseu.gwt.gestaoWeb.model.usuario.Usuario;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class PerfilUsuarioPresenter extends BasePresenter{

	public interface Display extends BaseDisplay {
		public void populaTela( PerfilUsuarioViewVO perfilVO );
		public boolean checaCampoEmBrancoPerfil();
		public PerfilUsuarioViewVO getPerfilVO();
		public HasClickHandlers getSalvarButton();
		public MessageBoxPanel getMsgPanel();
	}

	private final Display display;
	private final PortalResource recursos;
//	private PerfilUsuarioViewVO perfilVO = new PerfilUsuarioViewVO();

	private CadastroServiceAsync cadastroService = GWT.create(CadastroService.class);
	
	public PerfilUsuarioPresenter(Display display, PortalResource recursos ) {
		this.display = display;
		this.recursos = recursos;
		bind();
	}

	
	public void bind() {

		// --- Evendo do click do botao Entrar
	    getDisplay().getSalvarButton().addClickHandler(new ClickHandler() {   
	        public void onClick(ClickEvent event) {
	        	if ( getDisplay().checaCampoEmBrancoPerfil()){
	        		gravaPerfilAsync(getDisplay().getPerfilVO());
	        	} else {
	        		getDisplay().getMsgPanel().showMsg(true, true);
	        	}
	        }
	      });
		
	}

	public void go() {
		carregaPerfilAsync(recursos.getUsrAutentidado().getUsuarioAutenticado().getUsuario());
	}

	private void carregaPerfilAsync(Usuario usr) {
		cadastroService.carregaPerfil(usr, new AsyncCallback<PerfilUsuarioViewVO>() {

			public void onFailure(Throwable arg0) {
			}

			public void onSuccess(PerfilUsuarioViewVO perfil) {
				getDisplay().populaTela(perfil);

			}
		});
	}

	private void gravaPerfilAsync(PerfilUsuarioViewVO perfil) {
		cadastroService.gravaPerfil(perfil, new AsyncCallback<PerfilUsuarioViewVO>() {

			public void onFailure(Throwable arg0) {
			}

			public void onSuccess(PerfilUsuarioViewVO perfil) {
				getDisplay().getMsgPanel().clear();
				getDisplay().getMsgPanel().addMsg("Perfil salvo com sucesso");
				getDisplay().getMsgPanel().showMsg(false, true);
			}
		});
	}

	public Display getDisplay() {
		return display;
	}
	public PortalResource getRecursos() {
		return recursos;
	}


}
